package me.yushuai.wukong.base.api;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.yushuai.wukong.base.api.dto.CreateLocGroupDTO;
import me.yushuai.wukong.base.api.dto.UpdateLocGroupDTO;
import me.yushuai.wukong.base.api.request.PagingSearchLocGroupRequest;
import me.yushuai.wukong.base.api.vo.LocGroupVO;
import me.yushuai.wukong.common.dto.PageDTO;
import me.yushuai.wukong.common.error.WuKongException;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 库位组管理客户端
 *
 * @author zhoushuai@189.cn
 * @since 2022-08-31
 */
@Api("库位组API")
@FeignClient("${spring.application.name}")
public interface LocGroupApi {

    /**
     * 新建一条库位组记录
     *
     * @param createLocGroupDTO 新建库位组信息
     * @return 返回库位组的编号
     * @throws WuKongException 当库位组编码已经存在时抛出异常
     */
    @ApiOperation("新建库位组")
    @PostMapping("/loc-group")
    Long createLocGroup(@Validated @RequestBody CreateLocGroupDTO createLocGroupDTO) throws WuKongException;

    /**
     * 修改库位组信息
     *
     * @param locGroupId        库位组编号
     * @param updateLocGroupDTO 库位组信息
     * @return 返回被修改的库位组编号
     * @throws WuKongException 当库位组编号不存在时抛出异常
     */
    @ApiOperation("修改库位组")
    @PutMapping("/loc-group/{locGroupId}")
    Long editLocGroup(@PathVariable("locGroupId") Long locGroupId,
                      @Validated @RequestBody UpdateLocGroupDTO updateLocGroupDTO) throws WuKongException;

    /**
     * 删除一条库位组信息
     *
     * @param locGroupId 库位组编号
     * @param version    版本号
     * @return 返回库位组的编号
     * @throws WuKongException 当库位组不存在时抛出异常
     */
    @ApiOperation("删除库位组")
    @DeleteMapping("/loc-group/{groupId}/version/{version}")
    Long deleteLocGroup(@PathVariable("groupId") Long locGroupId,
                        @PathVariable("version") Long version) throws WuKongException;

    /**
     * 获取库位组详细信息
     *
     * @param locGroupId 库位组编号
     * @return 返回库位组详细信息
     * @throws WuKongException 当库位组信息不存在时抛出异常
     */
    @ApiOperation("库位组详细信息")
    @GetMapping("/loc-group/{groupId}")
    LocGroupVO getById(@PathVariable("groupId") Long locGroupId) throws WuKongException;


    /**
     * 分页条件检索库位组信息
     *
     * @param pagingSearchLocGroup 分页检索条件
     * @return 分页返回检索结果
     */
    @ApiOperation("分页条件检索海关编码信息")
    @PostMapping("/loc-groups")
    PageDTO<LocGroupVO> pagingSearchLocGroup(@Validated @RequestBody PagingSearchLocGroupRequest pagingSearchLocGroup);
}
